package com.zhx.common.user.service;

import com.zhx.common.common.domain.vo.req.CursorPageBaseReq;
import com.zhx.common.common.domain.vo.req.PageBaseReq;
import com.zhx.common.common.domain.vo.resp.CursorPageBaseResp;
import com.zhx.common.common.domain.vo.resp.PageBaseResp;
import com.zhx.common.user.domain.vo.req.friend.FriendApplyReq;
import com.zhx.common.user.domain.vo.req.friend.FriendApproveReq;
import com.zhx.common.user.domain.vo.req.friend.FriendCheckReq;
import com.zhx.common.user.domain.vo.req.friend.FriendDeleteReq;
import com.zhx.common.user.domain.vo.resp.friend.FriendApplyResp;
import com.zhx.common.user.domain.vo.resp.friend.FriendCheckResp;
import com.zhx.common.user.domain.vo.resp.friend.FriendResp;
import com.zhx.common.user.domain.vo.resp.friend.FriendUnreadResp;

/**
 * <p>
 * 用户联系人表 服务类
 * </p>
 *
 * @author zhx
 * @since 2024-01-15
 */
public interface IUserFriendService{

    /**
     * 游标分页获取联系人列表
     * @param uid
     * @param req
     * @return
     */
    CursorPageBaseResp<FriendResp> friendList(Long uid, CursorPageBaseReq req);

    /**
     * 批量校验是否是自己好友
     * @param uid
     * @param req
     * @return
     */
    FriendCheckResp check(Long uid, FriendCheckReq req);

    /**
     * 申请好友
     * @param uid
     * @param req
     */
    void apply(Long uid, FriendApplyReq req);

    /**
     * 删除好友
     * @param uid
     * @param targetId
     */
    void delete(Long uid, Long targetId);

    /**
     * 好友申请列表分页查询
     * @param uid
     * @param req
     * @return
     */
    PageBaseResp<FriendApplyResp> pageApplyByFriend(Long uid, PageBaseReq req);

    /**
     * 获取好友申请中的未读数
     * @param uid
     * @return
     */
    FriendUnreadResp unread(Long uid);

    /**
     * 审批同意
     * @param uid
     * @param request
     */
    void applyApprove(Long uid, FriendApproveReq request);
}
